-C++ doPlayerRemoveSkill

Status
Zamknięty.

Mikix95

Advanced User
Zarejestrowany
Dołączył
Listopad 3, 2009
Posty
169
Liczba reakcji
6
Prosi?bym kogo? o napisanie takiej funkcji, to raczej nie jest do?? trudne (cho? mi si? nie uda?o, jakie? b??dy wywala?o... xD).

Funkcja ma dzia?a? na podob? doPlayerAddSkillTry(cid,skillid,tries), tylko ma usuwa? skill.
 
Odp: doPlayerRemoveSkill

No to F5!

Nie ma na tym forum nikogo, kto by si? podo?a??
 
Odp: doPlayerRemoveSkill

Spr?buj tego:

luascript.cpp
pod
PHP:
	//doPlayerAddSkillTry(cid, skillid, n[, useMultiplier])
	lua_register(m_luaState, "doPlayerAddSkillTry", LuaScriptInterface::luaDoPlayerAddSkillTry);

dodaj
PHP:
	//doPlayerRemoveSkill(cid, skillid, n)
	lua_register(m_luaState, "doPlayerRemoveSkill", LuaScriptInterface::luaDoPlayerRemoveSkill);


pod
PHP:
int32_t LuaScriptInterface::luaDoPlayerAddSkillTry(lua_State* L)
{
	//doPlayerAddSkillTry(uid, skillid, n[, useMultiplier])
	bool multiplier = true;
	if(lua_gettop(L) > 3)
		multiplier = popNumber(L);

	uint32_t n = popNumber(L), skillid = popNumber(L);
	ScriptEnviroment* env = getEnv();
	if(Player* player = env->getPlayerByUID(popNumber(L)))
	{
		player->addSkillAdvance((skills_t)skillid, n, multiplier);
		lua_pushboolean(L, true);
	}
	else
	{
		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
		lua_pushboolean(L, false);
	}
	return 1;
}

dodaj

PHP:
int32_t LuaScriptInterface::luaDoPlayerRemoveSkill(lua_State* L)
{
	//doPlayerRemoveSkill(uid, skillid, n)
	uint32_t n = popNumber(L), skill = popNumber(L);
	ScriptEnviroment* env = getEnv();
	if(Player* player = env->getPlayerByUID(popNumber(L)))
	{
		if(skill <= SKILL_LAST)
		{
			player->skills[skill][SKILL_LEVEL] = player->skills[skill][SKILL_LEVEL] - n;
			player->sendSkills();
		}
		else
		{
			errorEx("Not valid skill. Niewlasciwy skill!");
			lua_pushboolean(L, false);
		}
	}
	else
	{
		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
		lua_pushboolean(L, false);
	}
	return 1;
}

luascript.h

pod
PHP:
		static int32_t luaDoPlayerAddSkillTry(lua_State* L);

dodaj
PHP:
		static int32_t luaDoPlayerRemoveSkill(lua_State* L);


Nietestowany.
Pami?taj, ?e to zdowngraduje skill, ale nie ruszy skillTry.
 
Odp: doPlayerRemoveSkill

Co znaczy, ?e skill spadnie, ale nie ruszy skillTry? Czyli jak skill mi spadnie z 45 na 44 to nadal b?dzie wykrywa? go jako 45?

@edit
Dzia?a ideolo, ale drobne sugestie, bo przy twoim wywala?o b??dy:
PHP:
int32_t LuaScriptInterface::luaDoPlayerRemoveSkill(lua_State* L)
{
    //doPlayerRemoveSkill(uid, skillid, n)
    uint32_t n = popNumber(L), skill = popNumber(L);
    ScriptEnviroment* env = getScriptEnv();
    if(Player* player = env->getPlayerByUID(popNumber(L)))
    {
        if(skill <= SKILL_LAST)
        {
            player->skills[skill][SKILL_LEVEL] = player->skills[skill][SKILL_LEVEL] - n;
            player->sendSkills();
        }
        else
        {
            reportErrorFunc("Not valid skill. Niewlasciwy skill!");
            lua_pushboolean(L, false);
        }
    }
    else
    {
		reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND));
        lua_pushboolean(L, false);
    }
    return 1;
}

M?g?by? odpowiedzie? na powy?sze pytanie? Bo nadal nie wiem, do czego jest te SkillTry.
 
Ostatnia edycja:
Odp: doPlayerRemoveSkill

Z tego co widz?, source masz pod < 8.54.
Co do tego skillTry. To chodzi?o mi o to, ?e jak masz skill 45 i 56% to funkcja powinna zmieni? tylko poziom skill'a, a te 56% powinno zosta?.
W sumie to chyba taki efekt chcia?e? uzyska?.
 
Odp: doPlayerRemoveSkill

Tak, taki efekt chcia?em uzyska?, ale teraz mam problem.

Do test?w stworzy?em runk? zabieraj?c? skill i gdy jej u?yj? to zabiera skill wszystkim postaciom na servie, zauwa?y?em to przelogowuj?c si? na inn? posta? xD
Da rad? zrobi? jaki? fix?

@edit
W skrypcie wszystko chyba jest dobrze, bo ?adnych bug?w nie wywala w silniku:
Kod:
    function onUse(cid, item, frompos, item2, topos)
    if item.itemid == 2287 and item.type > 0 then
    doPlayerRemoveSkill(cid,1,1)
	doChangeTypeItem(item.uid,item.type-1)
	doSendMagicEffect(topos,1)
    doPlayerSay(cid,"skill",16)
    else
    doRemoveItem(item.uid,1)

    end

    return 1
    end
Poza tym, my?l?, ?e skrypt nie by?by odpowiedzialny za utrat? skilla wszystkich wylogowanych i wlogowanych graczy.

Source mam z 7.92
 
Ostatnia edycja:
Odp: doPlayerRemoveSkill

Wiesz co z ciekawo?ci skompilowa?em sobie kod pod 0.3.6, podpi??em pod baze mysql, stworzy?em 3 postacie i u mnie dzia?a tak jak powinno, wi?c nie jestem w stanie dociec co jest tego powodem u Ciebie.
 
Odp: doPlayerRemoveSkill

Hmm... dobra, dzi?ki. Przynajmniej rozpocz??e? jako? ten w?tek, sam pokombinuj? i mo?e jako? to rozwi???.

@edit
Do zamkni?cia, okaza?o si?, ?e to skrypt wadzi?, po jego zmienieniu dzia?a wszystko w?a?ciwie.

@edit2
Mo?naby prosi? o fix, dzi?ki kt?remu funkcja nie b?dzie dzia?a?, jak kto? ma skll 0? Bo jak mam skill 0 i u?yj? runki to leci od nowa, czyli 255.
 
Ostatnia edycja:
Odp: doPlayerRemoveSkill

PHP:
int32_t LuaScriptInterface::luaDoPlayerRemoveSkill(lua_State* L)
{
    //doPlayerRemoveSkill(uid, skillid, n)
    uint32_t n = popNumber(L), skill = popNumber(L);
    ScriptEnviroment* env = getScriptEnv();
    if(Player* player = env->getPlayerByUID(popNumber(L)))
    {
        if(skill <= SKILL_LAST)
        {
			if(player->skills[skill][SKILL_LEVEL] > n)
			{
				player->skills[skill][SKILL_LEVEL] = player->skills[skill][SKILL_LEVEL] - n;
				player->sendSkills();
			}
			else
			{
				player->skills[skill][SKILL_LEVEL] = 1;
				player->sendSkills();
			}
		}
        else
        {
            reportErrorFunc("Not valid skill. Niewlasciwy skill!");
            lua_pushboolean(L, false);
        }
    }
    else
    {
        reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND));
        lua_pushboolean(L, false);
    }
    return 1;
}

?
 
Odp: doPlayerRemoveSkill

Dzia?a znakomicie, nie mog?em wcze?niej napisa?, ale napisa?bym, ?e "(getPlayerSkill(cid,nazwa skilla) >= ilo??)" te? rozwi?zuje problem :D

Tym razem do zamkni?cia!
 
Status
Zamknięty.
Back
Do góry